iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 21
0
自我挑戰組

前端工程師的30份套餐系列 第 21

Day21-Curry(柯里化)

  • 分享至 

  • xImage
  •  

Curry(柯里化),是將一個接受n個參數的function,轉變成只接受一個參數function的過程。原理是將傳入function的參數,利用閉包的特性將它們存放在另一個function中當作回傳值。
這樣做的優點是:

  • 簡化參數,一次處理一個參數,提高程式的彈性和可讀性
  • 將程式碼依功能拆解成更細的片段,有助於重複利用
function number(x,y) {
    return x*y;
}
number(5,2); //10

柯里化後就變成這樣:

function curryNumber(x) {
    return function(y) {
        return X*y;
    }
}

假設固定被乘數為5,接著分別帶入乘數2和3。
所以是5*2=10,5*3=15

var multiplicandNumber = curryNumber(5);
multiplicandNumber(2); //10
multiplicandNumber(3); //15

很簡單易懂對吧? 那再看一個例子

var addNumber = function(a) {
    return function(b) {
        return a+b;
    }
}
var addOne = add(5);
var addTwo = add(20);

addOne(2); //7
addTwo(2); //22

Curry所做的事就是美傳遞一個參數就會回傳一個新的function處理剩餘的參數,也就是一個輸入對應一個輸出


上一篇
Day20-閉包(二)
下一篇
Day22-Pure Function
系列文
前端工程師的30份套餐30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
lolmuta
iT邦新手 5 級 ‧ 2022-02-02 11:16:35

函數名稱好像寫錯了

var addNumber = function(a) {
return function(b) {
return a+b;
}
}

var addOne = add(5);
//這應該寫成 var addOne = addNumber(5);
var addTwo = add(20);
//這應該寫成 var addTwo = addNumber(20);

我要留言

立即登入留言